package juego.modelo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;



public class Resultados implements Serializable {
	private static final long serialVersionUID = 1L;
	private Jugador[] tablaJugadores;// Ordenado de mayor a menor
	private int mejorPuntaje;
	private int menorPuntaje;

	public Resultados() {
		this.tablaJugadores = new Jugador[10];
	}

	public void guardarPuntaje(String nombre, int puntos) throws IOException {
		if (puntos < 0)
			throw new IllegalArgumentException();
		if (nombre.length() < 1)
			nombre = "----------";
		agregarYOrdenarJugador(nombre, puntos);
		try {
			FileOutputStream fos = new FileOutputStream("Resultados.dat");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(this.tablaJugadores);
			oos.close();
		} catch (FileNotFoundException e) {
			throw new IOException();
		}
	}

	public void leerPuntaje() throws IOException, ClassNotFoundException {
		try {
			FileInputStream fis = new FileInputStream("Resultados.dat");
			ObjectInputStream ois = new ObjectInputStream(fis);
			this.tablaJugadores = (Jugador[]) ois.readObject();
			ois.close();
			setMejorPuntaje(tablaJugadores[0].getPuntos());
			for (int i = 0; i < 10; i++) {
				if (tablaJugadores[i] == null)
					tablaJugadores[i] = new Jugador("----------", 0);
			}
			setMenorPuntaje(tablaJugadores[9].getPuntos());
		} catch (FileNotFoundException e) {
			crearArchivoNuevo();
		}
	}

	private void setMenorPuntaje(int puntos) {
		this.menorPuntaje=puntos;
	}

	private void setMejorPuntaje(int puntos) {
		this.mejorPuntaje=puntos;
	}

	public void crearArchivoNuevo() throws IOException {
		for (int i = 0; i < 10; i++)
			tablaJugadores[i] = new Jugador("----------", 0);
		try {
			FileOutputStream fos = new FileOutputStream("Resultados.dat");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(this.tablaJugadores);
			oos.close();
		} catch (FileNotFoundException e) {
			throw new IOException();
		}
	}

	private void agregarYOrdenarJugador(String nombre, int puntos) {
		Jugador jugador = new Jugador(nombre, puntos);
		int i = 0;
		while ((tablaJugadores[i] != null) && (i < 9))
			i++;
		if ((i < 9) | (tablaJugadores[i].getPuntos() < puntos))
			tablaJugadores[i] = jugador;
		Arrays.sort(tablaJugadores);
	}

	public String getNombre(int posicion) {
		return tablaJugadores[posicion].getNombre(); 
	}

	public int getPuntos(int posicion) {
		return tablaJugadores[posicion].getPuntos();
	}

	public int getMejorPuntaje() {
		return mejorPuntaje;
	}
	
	public int getMenorPuntaje() {
		return menorPuntaje;
	}
}